import matplotlib.pyplot as plt
import numpy as np
def SeismicCurve(data, line=1.0, off=1, scale=2):
    """
    :param data: 二维地震数据，axis=0为时间采样，axis=1为地震道编号
    :param line: 设置曲线粗细，默认为1
    :param off:  每一道的偏移距离，默认为1
    :param scale: 每一道的压缩量，scale=2默认压缩到[-0.5,0.5]之间
    :return: 返回空值
    """
    # 生成一个地震数据时间方向同样长的向量
    data = data / (scale * np.max(data))  # 数据归一化处理
    x = np.arange(data.shape[0])
    # 添加一列
    data = np.append(np.zeros((data.shape[0], 1)), data, axis=1)
    # 绘制波形曲线
    for i in range(data.shape[1]):
        y = data[:, i] + i * off
        y = y.reshape(x.shape)
        plt.plot(y, x, 'k',  linewidth=line)

    # 设置图像坐标
    ax = plt.gca()  # 获取到当前坐标轴信息
    plt.ylim(0, data.shape[0])    # 设置y轴范围
    ax.invert_yaxis()   # 翻转y轴
    ax.xaxis.set_ticks_position('top')  # 反转Y坐标轴
    plt.xlim(0, data.shape[1])
    plt.xlabel("Trace number")
    plt.ylabel("Time sample")
    plt.yticks(rotation=90)  # y坐标刻度旋转90度
    plt.show()
    return

# import scipy.io as scio   # pip install scipy
#
# # 加载数据
# path = './d.mat'
# seismic_data = scio.loadmat(path)
#
# # 读取数据和数据预处理
# print(seismic_data.keys())  # 查看字典的键
# data = np.array(seismic_data['d'])  # 获取数据
# print(data.shape)  # 查看数据维度
#
# data1 = data[1:250, 0:25]
# SeismicCurve(data1)


